# 写一个蓝图
# 导入蓝图
from flask import Blueprint, jsonify, g
from flask_restful import Api, Resource, reqparse
import random
import redis
# 导入celery任务
from celery_tasks.sms.task import sms_code

# 实例一个蓝图url_prefix表示url的前缀
code_api = Blueprint("code", __name__, url_prefix="/code")

api = Api(code_api)


# 定义类
class SMSCode(Resource):
    def post(self):
        # 通过reqparse获取前端数据
        parser = reqparse.RequestParser()
        parser.add_argument("mobile")
        args = parser.parse_args()
        mobile = args["mobile"]
        # 创建验证码
        code = random.randint(100000, 999999)
        # 调用celery任务执行，传入手机号和验证码
        res = sms_code.delay(mobile, code)
        # 判断是否执行成功，成功把验证码存到redi否则返回发送失败
        if res:
            # 成功把验证码存到redis中
            # 连接redis  指明要存的库db=
            rdb = redis.Redis(db=3)
            # 通过set存入 第一个是key， 第二个是值，第三个是过期时间600代表600秒
            rdb.set(mobile, code, ex=600)
            # 关闭redis
            rdb.close()
            # 返回发送成功
            return jsonify(message="短信发送成功，请注意查收", code=200)
        else:
            return jsonify(message="短信发送失败", code=400)


# 添加路由
api.add_resource(SMSCode, "/sms_code")
